package org.utn.ia.search.init;

import java.util.ArrayList;
import java.util.List;

import org.utn.ia.search.adversarial.Game;
import org.utn.ia.search.enumeration.Accion;

public class Mankala implements Game<Estado, Accion, Jugador> {
	private Jugador[] jugadores;
	private List<Accion> accionesPosibles;
	
	public Mankala(Jugador[] jugadores) {
		this.jugadores = jugadores;
		this.accionesPosibles = inicializarAcciones();
	}
	
	public List<Accion> inicializarAcciones() {
		List<Accion> acciones = new ArrayList<Accion>();
		acciones.add(Accion.HOYO_UNO);
		acciones.add(Accion.HOYO_DOS);
		acciones.add(Accion.HOYO_TRES);
		acciones.add(Accion.HOYO_CUATRO);
		acciones.add(Accion.HOYO_CINCO);
		acciones.add(Accion.HOYO_SEIS);
		
		return acciones;
	}
	
	@Override
	public Estado getInitialState() {
		// implementar agregar 3 en el estado inicial inicial :)
		return null;
	}

	@Override
	public Jugador[] getPlayers() {
		return jugadores;
	}

	@Override
	public Jugador getPlayer(Estado state) {
		// TODO Auto-generated method stub
		return state.getTurnoActual();
	}

	@Override
	public List<Accion> getActions(Estado state) {
		return accionesPosibles;
	}

	@Override
	public Estado getResult(Estado state, Accion action) {
		// algoritmo que determine siguient estado en base a estado actual y acion tomada,  y cambie jugador
		return null;
	}

	@Override
	public boolean isTerminal(Estado state) {
		boolean resultado = false;
		if(state.esFinal()) {
			resultado = true;
		}
		
		return resultado;
	}

	@Override
	public double getUtility(Estado state, Jugador player) {
//		double utility = 0;
//		if(player.getTipoJugador() == TipoJugador.PC) {
//			utility = state.getPiedrasEnHoyoCero();
//		} else {
//			utility = state.getPiedrasEnHoyoTrece();
//		}
		
		return 0;//utility;
	}

}
